package com.qike.duola.service;

import com.qike.duola.dto.*;
import com.qike.duola.vo.*;

import java.util.List;
import java.util.Map;

/**
 * @Author: Eric.zhou
 * @Date: 2020/9/7 15:15
 */
public interface DuolaTransOrderService {

    /**
     * 发货
     * @param sendGoodsDto
     */
    void sendGoods(SendGoodsDto sendGoodsDto) throws Exception;


    /**
     * 运输单列表
     * @param planId
     * @param carNo
     * @return
     */
    List<TransListVo> TransList(Integer planId, String carNo);

    /**
     * 装料
     * @param loadGoodsDto
     */
    void loadGoods(LoadGoodsDto loadGoodsDto) throws Exception;

    /**
     * 装料跳转
     * @param transId
     * @return
     */
    LoadGoodsJumpVo loadGoodsJump(Integer transId) throws Exception;

    /**
     * 装料取消
     * @param transId
     */
    void loadGoodsCancel(Integer transId,Integer id) throws Exception;

    /**
     * 装料排序
     * @param loadGoodsSortDto
     */
    void loadGoodsSort(LoadGoodsSortDto loadGoodsSortDto);

    /**
     * 运输完成
     * @param transFinishDto
     */
    void transFinish(TransFinishDto transFinishDto) throws Exception;

    /**
     * 退料转料
     * @param returnTransferDto
     */
    void returnTransfer(ReturnTransferDto returnTransferDto) throws Exception;

    /**
     * 运输方量统计
     * @param transVolumeCountDto
     * @return
     */
    TransVolumeCount transVolumeCount(TransVolumeCountDto transVolumeCountDto);

    /**
     * 根据经纬度判断是否需要改变运输单状态
     * @param vo
     */
    void transStatus(CarLocationVo vo);

    Double history(Integer carId);

    /**
     * 根据长短距离和发货类型自主选择车辆
     * @param planId
     * @param sendType
     * @return
     */
    RecommendCarVo recommendCar(Integer planId, Integer sendType,Double volume);

    /**
     * 获取所有空闲可用的车辆 传入方量,车牌号  不传显示所有
     * @param carNo
     * @param volume
     * @return
     */
    List<GetAllFreeCarListVo> getAllFreeCarList(String carNo, Double volume);


    /**
     * 通过合同id 获取已发货数量
     * @param id
     * @return
     */
    Double getSendVolumeByProjectId(Integer id);

    /**
     * 退料转料跳转
     * @param transId
     * @return
     */
    ReturnTransferJumpVo returnTransferJump(Integer transId) throws Exception;

    /**
     * 通过车辆id获取最新运输单
     * @param carId
     * @param lat
     * @param lng
     * @return
     */
    GetLastTransOrderByCarIdVo getLastTransOrderByCarId(Integer carId, Double lat, Double lng) throws Exception;

    /**
     * 通知车辆前来装料
     * @param noticeCarDto
     */
    void noticeCar(NoticeCarDto noticeCarDto);
}
